package com.huashi.dealer.modular.business.goods.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.huashi.dealer.commonEntity.Goods;
import com.huashi.dealer.commonEntity.User;
import com.huashi.dealer.modular.business.goods.bo.GoodsListBo;
import com.huashi.dealer.modular.business.goods.param.GoodsResponseParam;
import com.huashi.dealer.modular.business.goods.param.GoodsDetailVo;
import com.huashi.dealer.modular.business.goods.vo.GoodsListVo;

import java.util.List;

/**
 * API商品Service接口
 *
 * @author 谭陈强
 * @since 2025-07-30
 */
public interface GoodsService extends IService<Goods> {

    /**
     * 获取商品分类列表
     *
     * @return 商品分类列表
     */
    GoodsResponseParam getCategoryList();

    /**
     * 获取商品列表（使用GoodsListBo）
     *
     * @param bo 商品列表查询参数
     * @return 商品列表分页数据
     */
    Page<GoodsListVo> getGoodsList(GoodsListBo bo,Page<Goods> page);

    /**
     * 获取商品列表（兼容旧版本）
     *
     * @param categoryId 分类ID
     * @param search 搜索关键词
     * @param isNewProduct 是否新品：10是，20否
     * @param isHotSellingItem 是否爆款：10是，20否
     * @param page 页码
     * @param listRows 每页数量
     * @return 商品列表
     */
    GoodsResponseParam getGoodsList(Long categoryId, String search, Integer isNewProduct, Integer isHotSellingItem, Integer page, Integer listRows);

    /**
     * 获取商品详情
     *
     * @param goodsId 商品ID
     * @param user 用户信息（用于权限验证）
     * @return 商品详情
     */
    GoodsDetailVo getGoodsDetail(Long goodsId, User user);

    /**
     * 获取扫码商品详情
     *
     * @param barCode 条形码
     * @return 商品详情
     */
    List<GoodsDetailVo> getBarCodeDetail(String barCode);

    /**
     * 生成商品海报
     *
     * @param goodsId 商品ID
     * @param token 用户令牌
     * @return 商品海报
     */
    GoodsResponseParam generateGoodsPoster(Long goodsId, String token);

    /**
     * 商品搜索
     *
     * @param keyword 搜索关键词
     * @param categoryId 分类ID
     * @param page 页码
     * @param listRows 每页数量
     * @return 搜索结果
     */
    GoodsResponseParam searchGoods(String keyword, Long categoryId, Integer page, Integer listRows);

    /**
     * 获取热门商品
     *
     * @param limit 限制数量
     * @return 热门商品列表
     */
    GoodsResponseParam getHotGoods(Integer limit);

    /**
     * 获取新品推荐
     *
     * @param limit 限制数量
     * @return 新品推荐列表
     */
    GoodsResponseParam getNewGoods(Integer limit);

    /**
     * 获取商品推荐
     *
     * @param goodsId 商品ID
     * @param limit 限制数量
     * @return 商品推荐列表
     */
    GoodsResponseParam getRecommendGoods(Long goodsId, Integer limit);
} 